package com.gylang.crypto.resolver;

import com.gylang.crypto.annotation.CryptoResponse;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;

/**
 * @author gylang
 * data 2021/1/5
 */
public interface EncryptKeyResolver {

    /**
     * 判断是否支持当前模式的获取
     *
     * @param responseBody   原响应对象
     * @param request       请求对象
     * @param cryptoRequest 方法加密注解
     * @return 支持 true
     */
    boolean support(Object responseBody, CryptoResponse cryptoRequest, ServerHttpRequest request, ServerHttpResponse response);

    /**
     * 通过密文 请求 和 注解 解析获取秘钥
     *
     * @param responseBody   原响应对象
     * @param request       请求对象
     * @param cryptoRequest 方法加密注解
     * @return 秘钥
     */
    String encryptKey(Object responseBody, CryptoResponse cryptoRequest, ServerHttpRequest request, ServerHttpResponse response);

    /**
     * 通过密文 请求 和 注解 解析获取秘钥
     *
     * @param responseBody   原响应对象
     * @param request       请求对象
     * @param cryptoRequest 方法加密注解
     * @return 秘钥
     */
    String signKey(Object responseBody, CryptoResponse cryptoRequest, ServerHttpRequest request, ServerHttpResponse response);




}
